package com.hongfasoft.wx.service;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;

import com.hongfasoft.model.BaiduMusicService;
import com.hongfasoft.model.SendPicArticl;
import com.hongfasoft.model.WeatherService;
import com.hongfasoft.util.DBManager;
import com.hongfasoft.util.MessageUtil;
import com.hongfasoft.util.TokenAccessManager;
import com.hongfasoft.util.WeixinUtil;
import com.hongfasoft.wx.message.CustomerServiceMessage;
import com.hongfasoft.wx.message.TextMessage;

/**
 * 
 * 类描述：核心服务类
 * 
 * @author 王涛
 * @date 2014年12月7日
 */
public class CoreService
{
	private static final String PROJECT_ROOT = "AJZTJWeiWeb";
	public static String realRoot = null;

	/**
	 * 处理微信发来的请求
	 * 
	 * @param request
	 * @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static String processRequest(HttpServletRequest request)
	{
		String respMessage = null;
		try
		{
			// SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
			// 默认返回的文本消息内容
			String respContent = "请求处理异常，请稍候尝试！";

			// xml请求解析
			Map<String, String> requestMap = MessageUtil.parseXml(request);
			System.out.println("coreService-->request:\r\n" + requestMap);

			// 发送方帐号（open_id）
			String fromUserName = requestMap.get("FromUserName");
			// 公众帐号
			String toUserName = requestMap.get("ToUserName");
			// 消息类型
			String msgType = requestMap.get("MsgType");

			// 回复文本消息
			TextMessage textMessage = new TextMessage();
			textMessage.setToUserName(fromUserName);
			textMessage.setFromUserName(toUserName);
			textMessage.setCreateTime(new Date().getTime());
			textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
			textMessage.setFuncFlag(0);

			String root = request.getSession().getServletContext().getRealPath("");
			System.out.println(root);

			// 文本消息
			if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT))
			{
				// 文本消息内容
				String content = requestMap.get("Content").trim();
				// 如果以“歌曲”2个字开头
				if (content.startsWith("歌曲"))
				{
					respMessage = BaiduMusicService.respXML(requestMap);
					return respMessage;
				} else if (content.startsWith("天气"))
				{
					respMessage = WeatherService.getWeatherInfo(requestMap);
					System.out.println("coreService-->天气response:\r\n" + respMessage);
					return respMessage;
				} else if (content.startsWith("诊断"))
				{
					respMessage = SendPicArticl.responseAsPic(requestMap, "zhenduan");
					return respMessage;
				} else if (content.startsWith("你好") || content.startsWith("投诉") || content.startsWith("咨询") || content.startsWith("客服"))
				{
					CustomerServiceMessage csm = new CustomerServiceMessage();
					csm.setFromUserName(toUserName);
					csm.setToUserName(fromUserName);
					csm.setCreateTime(new Date().getTime()/1000);
					respMessage = MessageUtil.customerServiceMessageToXml(csm);
					return respMessage;
				} else
				{
					respContent = "您发送的是文本消息！内容为：" + content;
				}
			}
			// 图片消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE))
			{
				respContent = "您发送的是图片消息！";
				String mediaId = requestMap.get("MediaId");
				try
				{
					String localPath = WeixinUtil.downloadMediaFromWx(TokenAccessManager.getAccessToken().getToken(), mediaId, root + "/"
							+ WeixinUtil.wxdownPath);
					localPath = localPath.replace(root, "") + "";
					requestMap.put("LocalUrl", localPath);
					DBManager.saveWxMedia(requestMap);
				} catch (Exception e)
				{
					e.printStackTrace();
				}
			}
			// 地理位置消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION))
			{
				respContent = "您发送的是地理位置消息！";
			}
			// 链接消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK))
			{
				respContent = "您发送的是链接消息！";
			}
			// 音频消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE))
			{
				respContent = "您发送的是音频消息！";
				try
				{
					String voiceId = requestMap.get("MediaId");
					/*
					 * objs[0] = dataMap.get("LocalUrl"); objs[1] =
					 * dataMap.get("MsgType"); objs[2] =
					 * dataMap.get("LocalThumb"); objs[3] =
					 * dataMap.get("ThumbMediaId"); objs[4] =
					 * dataMap.get("MediaId"); objs[5] = new
					 * Date(WeixinUtil.getTime
					 * (String.valueOf(dataMap.get("CreateTime")))); objs[6] =
					 * dataMap.get("FromUserName");
					 */
					String voiceLocalPath = WeixinUtil.downloadMediaFromWx(TokenAccessManager.getAccessToken().getToken(), voiceId, root + "/"
							+ WeixinUtil.wxdownPath);
					voiceLocalPath = voiceLocalPath.replace(root, PROJECT_ROOT);
					requestMap.put("LocalUrl", voiceLocalPath);
					DBManager.saveWxMedia(requestMap);
				} catch (Exception e)
				{
					e.printStackTrace();
				}

			}
			// 视频消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO))
			{
				respContent = "您发送的是视频消息！";
				try
				{
					String videoId = requestMap.get("MediaId");
					String videoLocalPath = WeixinUtil.downloadMediaFromWx(TokenAccessManager.getAccessToken().getToken(), videoId, root + "/"
							+ WeixinUtil.wxdownPath);
					videoLocalPath = videoLocalPath.replace(root, PROJECT_ROOT);
					requestMap.put("LocalUrl", videoLocalPath);
					String videoThumbId = requestMap.get("ThumbMediaId");
					String videoThumbLocalPath = WeixinUtil.downloadMediaFromWx(TokenAccessManager.getAccessToken().getToken(), videoThumbId, root + "/"
							+ WeixinUtil.wxdownPath);
					videoThumbLocalPath = videoThumbLocalPath.replace(root, PROJECT_ROOT);
					requestMap.put("LocalThumb", videoThumbLocalPath);
					DBManager.saveWxMedia(requestMap);
				} catch (Exception e)
				{
					e.printStackTrace();
				}

			}
			// 事件推送
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT))
			{
				// 事件类型
				String eventType = requestMap.get("Event");
				// 订阅
				if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE))
				{
					HashMap followMap = new HashMap();
					followMap.put("userwx", requestMap.get("FromUserName"));
					followMap.put("followtime", new Date(System.currentTimeMillis()));
					followMap.put("disfollowtime", null);
					boolean result = DBManager.addFollowUser(followMap);
					if (result)
					{
						// respContent = SendPicArticl.getUseage();
						respContent = welcome();
					} else
					{
						respContent = "关注失败，请联系客服。";
					}
				}
				// 取消订阅
				else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE))
				{
					// 取消订阅后用户再收不到公众号发送的消息，因此不需要回复消息
					HashMap followMap = new HashMap();
					followMap.put("userwx", requestMap.get("FromUserName"));
					followMap.put("disfollowtime", new Date(System.currentTimeMillis()));
					followMap.put("followtime", null);
					boolean result = DBManager.addFollowUser(followMap);
					if (result)
					{
						respContent = "欢迎光临！\r\n根据资金流动论，2012年末确立资本市场无形资产方向，全民皆兵的股票为主战场。股票完全分类分为：无形资产类股票与有形资产类股票两种，无形资产类股票已经高潮，有形资产类股票的激情正在上演并将持续下去，完全可能延续到2016年。\r\n希望此理论可以帮助领悟者发现并把握资本市场方向，强我资本市场，抵御美日资本入侵。\r\n一骑绝尘\r\n牛市欲来风满楼，天地亦无忧。\r\n空天阔地何处去，A 股莫回头。\r\n2014年7月19日\r\n";
					} else
					{
						respContent = "取消关注失败，请联系客服。";
					}
				}
				// 自定义菜单点击事件
				else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK))
				{
					// 事件KEY值，与创建自定义菜单时指定的KEY值对应
					String eventKey = requestMap.get("EventKey");
					DBManager.updateLastActiveTime(fromUserName);
					if (eventKey.equals("11"))
					{
						// respContent = "资金流动论系列文章迁移中，精彩稍候开放。";
						respMessage = SendPicArticl.responseAsPic(requestMap, false, "11");
						System.out.println("coreService-->response" + respMessage);
						return respMessage;
					} else if (eventKey.equals("21"))
					{
						respMessage = SendPicArticl.responseAsPic(requestMap, false, "21");// SendPicArticl.getUseage();
						System.out.println("coreService-->response" + respMessage);
						return respMessage;
					} else if (eventKey.equals("22"))
					{
						// if (DBManager.checkIsMember(fromUserName))
						// {
						respMessage = SendPicArticl.responseAsPic(requestMap, false, "22");// SendPicArticl.responseAsPic(requestMap,
																							// "22");
						return respMessage;
						// } else
						// {
						// respContent = "功能完善中，敬请期待";
						// // respContent = "亲，还不是会员哦，请 <a href=\"" +
						// // DBManager.WEB_URL +
						// // "articleInfo.html\">购买会员</a> 。";
						// }
					} else if (eventKey.equals("31"))// 会员须知
					{
						respContent = "会员制度制定中";
					} else if (eventKey.equals("32"))
					{
						respContent = "您好，会员第一季招募已经完成。感谢支持，下一轮会员开放日将由本公司向资金流动论创始人提出申请，择机开放。由于粉丝及会员人数众多，部分会员专享案例由于在敏感时期公开，导致在某一时间买量巨大而影响了场内资金的运作，希望投资者为了自身利益谨慎投资。不要忘记资金流动论创始人的宗旨！授人以渔！";
					} else if (eventKey.equals("33"))
					{
						respContent = "会员专享文章，运用实例辅助对资金流动论的融会贯通，仅限学习研究之用。";
						// respMessage = SendPicArticl.responseAsPic(requestMap,
						// false,
						// "33");//SendPicArticl.responseAsPic(requestMap,
						// "22");
						// return respMessage;
					} else if (eventKey.equals("34"))
					{
						respContent = "资金流动论独一无二股票池，无论无形资产类股票还是有形资产类股票，均在潜伏期阶段发掘出来，几乎涵盖了市场的表现最好的股票，这类股票全部都识之于微时。大概分为三类，会员专享。曾经有机构花重金求购，创始人无动于衷，因为创始人本着推动市场进步的神圣使命，将其奉献给了有缘人。";
						// respMessage = SendPicArticl.responseAsPic(requestMap,
						// false,
						// "33");//SendPicArticl.responseAsPic(requestMap,
						// "22");
						// return respMessage;
					}
				}
			}

			textMessage.setContent(respContent);
			// textMessage.setMsgType(MessageUtil.REQ_MESSAGE_TYPE_SERVICE);
			respMessage = MessageUtil.textMessageToXml(textMessage);
		} catch (Exception e)
		{
			e.printStackTrace();
		}

		System.out.println("回复：" + respMessage);
		return respMessage;
	}

	private static String welcome()
	{
		StringBuffer buffer = new StringBuffer();
		buffer.append("欢迎踏入成功之门！\r\n\r\n资金流动论投资绝学在中国资本史上首次对庞杂的资本市场做出了完全分类，首次对股票市场做出了完全分类，首次把股票牛市区分为无形资产类股票牛市与有形资产类股票牛市两个阶段，率先精准确立了无形资产类股票的起点与有形资产类股票牛市的起点，首次对股票市场做出了逐段分解，首次对市场进行了标准的潜伏期阶段的定义，首次对市场做出了空窗期阶段的定义。其定义无可辩驳，其方向之精准堪称奇迹。\r\n\r\n资金流动论创始人是中国确立牛市到来的第一人，现将此投资绝学公之于众，旨在帮助投资者认清资本市场本质，致力于凝聚市场主导力量，愿意为促进中国资本市场强大，推动中国社会进步而奋斗终身。\r\n\r\n资金流动论创始人在授人以渔的同时，提醒中国投资者：股票是资本市场的一部分而非全部，自古以来不谋全局者不足以谋一域，不纵观资本市场全局，股票是不可能做好的。局限于股票小圈子不能自拔者永远不能领略到市场的大格局。\r\n\r\n资金流动论必将载入史册。\r\n\r\n一骑绝尘——2014年7月19日\r\n\r\n牛市欲来风满楼，天地亦无忧；\r\n空天阔地何处去？A股莫回头。");
		// buffer.append("欢迎光临！\r\n根据资金流动论，2012年确立资本市场无形资产方向，全民皆兵的股票为主战场。股票完全分类分为：无形资产类股票与有形资产类股票两种，无形资产类股票已经高潮，有形资产类股票的激情正在上演并将持续下去，完全可能延续到2016年。\r\n希望此理论可以帮助领悟者发现并把握资本市场方向，强我资本市场，抵御美日资本入侵。\r\n资金流动论投资绝学在(中国)资本史上首次对庞杂的资本市场做出了完全分类，首次对股票市场做出了完全分类，首次把股票牛市区分为无形资产类股票牛市与有形资产类股票牛市两个阶段，率先精准确立了无形资产类股票的起点与有形资产类股票牛市的起点，首次对股票市场做出了逐段分解，首次对市场进行了标准的潜伏期阶段的定义，首次对市场做出了空窗期阶段的定义。其定义无可辩驳，其方向之精准堪称奇迹。"
		// +
		// "\r\n\r\n资金流动论创始人是中国确立牛市到来的第一人，现将此投资绝学公之于众，旨在帮助投资者认清资本市场本质，致力于凝聚市场主导力量，愿意为促进中国资本市场强大，推动中国社会进步而奋斗终身。\r\n\r\n资金流动论必将载入史册。\r\n2014年7月19日");
		// buffer.append(SendPicArticl.getUseage());
		return buffer.toString();
	}

}